home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / foo2hiperc-wrapper < prev    next >
Text File  |  2009-10-19  |  17KB  |  682 lines

  1. #!/bin/sh
  2.  
  3. #* Copyright (C) 2003-2006  Rick Richardson
  4. #*
  5. #* This program is free software; you can redistribute it and/or modify
  6. #* it under the terms of the GNU General Public License as published by
  7. #* the Free Software Foundation; either version 2 of the License, or
  8. #* (at your option) any later version.
  9. #*
  10. #* This program is distributed in the hope that it will be useful,
  11. #* but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #* GNU General Public License for more details.
  14. #*
  15. #* You should have received a copy of the GNU General Public License
  16. #* along with this program; if not, write to the Free Software
  17. #* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. #*
  19. #* Authors: Rick Richardson <rick.richardson@comcast.net>
  20.  
  21. VERSION='$Id: foo2hiperc-wrapper.in,v 1.15 2009/05/11 17:35:55 rick Exp $'
  22.  
  23. #
  24. # Printer Notes:
  25. #
  26. # Oki Data C3100
  27. # Oki Data C3200
  28. # Oki Data C3300
  29. # Oki Data C3400
  30. # Oki Data C5100
  31. # Oki Data C5250
  32. # Oki Data C5500
  33. # Oki Data C5600
  34. # Oki Data C5800
  35. #
  36.  
  37. PROGNAME="$0"
  38. BASENAME=`basename $PROGNAME`
  39. PREFIX=/usr
  40. SHARE=$PREFIX/share/foo2hiperc
  41. PATH=$PATH:/sw/bin:/opt/local/bin
  42. PATH=$PATH:.
  43.  
  44. #
  45. #    Log the command line, for debugging and problem reports
  46. #
  47. if [ -x /usr/bin/logger -o -x /bin/logger ]; then
  48.     logger -t "$BASENAME" -p lpr.info -- "$BASENAME $@" </dev/null
  49. fi
  50.  
  51. usage() {
  52.     cat <<EOF
  53. Usage:
  54.     $BASENAME [options] [ps-file]
  55.  
  56.     Foomatic printer wrapper for the foo2hiperc printer driver.
  57.     This script reads a Postscript ps-file or standard input
  58.     and converts it to a Oki Data HIPERC stream for the
  59.     C3100/C3200/C3250/C3400/C5100/C5250n/C5500/C5600/C5800 printers.
  60.  
  61. Normal Options:
  62. -c                Print in color (else monochrome)
  63. -C colormode      Colormode [$COLORMODE]
  64.                     10=ICM color profile (using -G *.icm file)
  65. -d duplex         Duplex code to send to printer [$DUPLEX]
  66.                     1=off, 2=longedge, 3=shortedge
  67. -m media          Media code to send to printer [$MEDIA]
  68.                     0=plain 1=labels 2=transparency
  69. -p paper          Paper code [$PAPER]
  70.                     1=A4, 2=letter, 3=legal, 5=A5, 6=B5, 7=A6, 8=envMonarch
  71.                     9=envDL, 10=envC5, 11=env#10, 12=executive, 13=env#9
  72. -n copies         Number of copies [$COPIES]
  73. -r <xres>x<yres>  Set device resolution in pixels/inch [$RES]
  74. -s source         Source code to send to printer [$SOURCE]
  75.                     0=auto 1=tray1 2=tray2 3=multi 4=manual
  76.             Code numbers may vary with printer model.
  77. -t                Draft mode.  Every other pixel is white.
  78. -2/-3/-4/-6/-8/-10/-12/-14/-15/-16/-18
  79.                   Print with N-up (requires psutils)
  80. -o orient         For N-up: -op is portrait, -ol is landscape, -os is seascape.
  81.  
  82. Printer Tweaking Options:
  83. -u <xoff>x<yoff>  Set offset of upper left printable in pixels [varies]
  84. -l <xoff>x<yoff>  Set offset of lower right printable in pixels [varies]
  85. -L mask           Send logical clipping values from -u/-l in ZjStream [3]
  86.                   0=no, 1=Y, 2=X, 3=XY
  87. -P                Do not output START_PLANE codes.  May be needed by some
  88.                   monochrome-only printers.
  89. -X padlen         Add extra zero padding to the end of BID segments [16]
  90. -Z compressed     Use uncompressed (0) or compressed (1) data [0]
  91.  
  92. Color Tweaking Options:
  93. -g gsopts         Additional options to pass to Ghostscript, such as
  94.                   -dDITHERPPI=nnn, etc.  May appear more than once. []
  95. -G profile.icm    Convert profile.icm to a Postscript CRD using icc2ps and
  96.                   adjust colors using the setcolorrendering PS operator.
  97.                   $SHARE/icm/ will be searched for profile.icm.
  98. -I intent         Select profile intent from ICM file [$INTENT]
  99.                   0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute
  100. -G gamma-file.ps  Prepend gamma-file to the Postscript input to perform
  101.                   color correction using the setcolortransfer PS operator.
  102.  
  103. Debugging Options:
  104. -S plane          Output just a single color plane from a color print [all]
  105.                   1=Cyan, 2=Magenta, 3=Yellow, 4=Black
  106. -D lvl            Set Debug level [$DEBUG]
  107. -V                $VERSION
  108. EOF
  109.  
  110.     exit 1
  111. }
  112.  
  113. #
  114. #       Report an error and exit
  115. #
  116. error() {
  117.     echo "$BASENAME: $1" >&2
  118.     exit 1
  119. }
  120.  
  121. dbgcmd() {
  122.     if [ $DEBUG -ge 1 ]; then
  123.         echo "$@" >&2
  124.     fi
  125.     "$@"
  126. }
  127.  
  128. #
  129. #    N-up-ify the job.  Requires psnup from psutils package
  130. #
  131. nup() {
  132.     case "$NUP" in
  133.     [2368]|1[0458])
  134.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.3in -p$paper -q
  135.     ;;
  136.     [49]|1[26])
  137.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.5in -p$paper -q
  138.     ;;
  139.     *)
  140.     error "Illegal call to nup()."
  141.     ;;
  142.     esac
  143. }
  144.  
  145. #
  146. #       Process the options
  147. #
  148.  
  149. # Try to use a local copy of GhostScript 8.54, if available.  Otherwise,
  150. # fallback to whatever the Linux distro has installed (usually 7.07)
  151. #
  152. # N.B. := operator used here, when :- would be better, because "ash"
  153. # doesn't have :-
  154. if gs.foo -v >/dev/null 2>&1; then
  155.         GSBIN=${GSBIN:-gs.foo}
  156. else
  157.         GSBIN=${GSBIN:-gs}
  158. fi
  159.  
  160. CMDLINE="$*"
  161. DEBUG=0
  162. DUPLEX=1
  163. COLOR=
  164. COLORMODE=default
  165. MODEL=0
  166. QUALITY=1
  167. QUALITY=wts
  168. MEDIA=0
  169. COPIES=1
  170. test -r /etc/papersize && PAPER=$(cat /etc/papersize)
  171. test "$PAPER" || PAPER=2
  172. RES=600x600
  173. SOURCE=0
  174. NUP=
  175. CLIP_UL=
  176. CLIP_LR=
  177. CLIP_LOG=
  178. BC=
  179. AIB=
  180. NOPLANES=
  181. COLOR2MONO=
  182. GAMMAFILE=default
  183. INTENT=0
  184. GSOPTS=
  185. EXTRAPAD=
  186. SAVETONER=
  187. NUP_ORIENT=
  188. COMPRESSED=
  189. GSDEV=-sDEVICE=pbmraw
  190. # What mode to use if the user wants us to pick the "best" mode
  191. case `$GSBIN --version` in
  192. 7*)    DEFAULTCOLORMODE=10
  193.     DEFAULTCOLORMODE=10
  194.     ;;
  195. 8.1*)
  196.     DEFAULTCOLORMODE=10
  197.     QUALITY=1
  198.     ;;
  199. *)    DEFAULTCOLORMODE=10
  200.     ;;
  201. esac
  202. while getopts "1:23456789o:b:cC:d:g:l:u:L:m:n:p:q:r:s:tz:ABS:D:G:I:PX:Z:Vh?" opt
  203. do
  204.     case $opt in
  205.     b)    GSBIN="$OPTARG";;
  206.     c)    COLOR=-c;;
  207.     d)    DUPLEX="$OPTARG";;
  208.     g)    GSOPTS="$GSOPTS $OPTARG";;
  209.     m)    MEDIA="$OPTARG";;
  210.     n)    COPIES="$OPTARG";;
  211.     p)    PAPER="$OPTARG";;
  212.     q)    QUALITY="$OPTARG";;
  213.     r)    RES="$OPTARG";;
  214.     s)    SOURCE="$OPTARG";;
  215.     t)    SAVETONER="-t";;
  216.     z)    MODEL="$OPTARG";;
  217.     l)    CLIP_LR="-l $OPTARG";;
  218.     u)    CLIP_UL="-u $OPTARG";;
  219.     L)    CLIP_LOG="-L $OPTARG";;
  220.     A)    AIB=-A;;
  221.     B)    BC=-B;;
  222.     C)    COLORMODE="$OPTARG";;
  223.     S)    COLOR2MONO="-S$OPTARG";;
  224.     D)    DEBUG="$OPTARG";;
  225.     G)    GAMMAFILE="$OPTARG";;
  226.     I)    INTENT="$OPTARG";;
  227.     P)    NOPLANES=-P;;
  228.     X)    EXTRAPAD="-X $OPTARG";;
  229.     Z)    COMPRESSED="-Z $OPTARG";;
  230.     [234689])    NUP="$opt";;
  231.     [57])    error "Can't find acceptable layout for $opt-up";;
  232.     1)    case "$OPTARG" in
  233.         [024568])    NUP="1$OPTARG";;
  234.         *)    error "Can't find acceptable layout for 1$OPTARG-up";;
  235.         esac
  236.         ;;
  237.     o)    case "$OPTARG" in
  238.         l*)    NUP_ORIENT=-l;;
  239.         s*)    NUP_ORIENT=-r;;
  240.         p*|*)    NUP_ORIENT=;;
  241.         esac;;
  242.     V)    echo "$VERSION"; foo2hiperc -V; foo2zjs-pstops -V; exit 0;;
  243.     h|\?)
  244.         if [ "$CMDLINE" != "-?" -a "$CMDLINE" != -h ]; then
  245.             echo "Illegal command:"
  246.             echo "    $0 $CMDLINE"
  247.             echo
  248.         fi
  249.         usage;;
  250.     esac
  251. done
  252. shift `expr $OPTIND - 1`
  253.  
  254. #
  255. # If there is an argument left, take it as the file to print.
  256. # Else, the input comes from stdin.
  257. #
  258. if [ $# -ge 1 ]; then
  259.     if [ "$LPJOB" = "" ]; then
  260.     : # LPJOB="$1"
  261.     fi
  262.     exec < $1
  263. fi
  264.  
  265. #
  266. case "$QUALITY" in
  267. 0)
  268.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  269.     ;;
  270. 1)
  271.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  272.     ;;
  273. 2)
  274.     GSOPTS="-dMaxBitmap=500000000 $GSOPTS"
  275.     ;;
  276. wts)
  277.     GSOPTS="-dCOLORSCREEN -dMaxBitmap=500000000 $GSOPTS"
  278.     ;;
  279. esac
  280.  
  281. #
  282. #    Validate model code
  283. #
  284. case "$MODEL" in
  285. 0|1)    ;;
  286. *)    error "Unknown model code $MODEL";;
  287. esac
  288.  
  289. #
  290. #    Validate media code
  291. #
  292. case "$MEDIA" in
  293. 0|plain)    MEDIA=0;;
  294. 1|labels)    MEDIA=1;;
  295. 2|transparency)    MEDIA=2;;
  296. [0-9]*)        ;;
  297. *)        error "Unknown media code $MEDIA";;
  298. esac
  299.  
  300. #
  301. #    Validate source (InputSlot) code
  302. #
  303. case "$SOURCE" in
  304. 1|tray1)    SOURCE=1;;
  305. 2|tray2)    SOURCE=2;;
  306. 3|multi)    SOURCE=3;;
  307. 4|manual)    SOURCE=4;;
  308. [0-9]*)        ;;
  309. *)        error "Unknown source code $SOURCE";;
  310. esac
  311.  
  312. #
  313. #    Validate Duplex code
  314. #
  315. case "$DUPLEX" in
  316. 1|off|none)    DUPLEX=1;;
  317. 2|long*)    DUPLEX=2;;
  318. 3|short*)    DUPLEX=3;;
  319. [0-9]*)        ;;
  320. *)        error "Unknown duplex code $DUPLEX";;
  321. esac
  322.  
  323. #
  324. #    Validate Resolution
  325. #
  326. case "$RES" in
  327. 300x300)    ;;
  328. 600x600)    ;;
  329. 1200x600)    ;;
  330. 1200x1200)    ;;
  331. 600x1200)    ;;
  332. *)        error "Illegal resolution $RES";;
  333. esac
  334.  
  335. #
  336. #    Figure out the paper dimensions in pixels/inch, and set the
  337. #    default clipping region.  Unfortunately, this is a trouble
  338. #    area for ZjStream printers.  Various versions of ZjS print
  339. #    engines react differently when asked to print into their
  340. #    unprintable regions.
  341. #
  342. set_clipping() {
  343.     ulx=$1; uly=$2
  344.     lrx=$3; lry=$4
  345.  
  346.     # Set clipping region if it isn't already set
  347.     if [ "$CLIP_UL" = "" ]; then
  348.     case "$RES" in
  349.     300x300)    ulx=`expr $ulx / 4`; uly=`expr $uly / 2`;;
  350.     600x600)    ulx=`expr $ulx / 2`;;
  351.     600x1200)    ulx=`expr $ulx / 2`; uly=`expr $uly \* 2`;;
  352.     2400x600)    ulx=`expr $ulx \* 2`;;
  353.     esac
  354.     CLIP_UL="-u ${ulx}x${uly}"
  355.     fi
  356.     if [ "$CLIP_LR" = "" ]; then
  357.     case "$RES" in
  358.     300x300)    lrx=`expr $lrx / 4`; lry=`expr $lry / 2`;;
  359.     600x600)    lrx=`expr $lrx / 2`;;
  360.     600x1200)    lrx=`expr $lrx / 2`; lry=`expr $lry \* 2`;;
  361.     2400x600)    lrx=`expr $lrx \* 2`;;
  362.     esac
  363.     CLIP_LR="-l ${lrx}x${lry}"
  364.     fi
  365. }
  366.  
  367. case "$PAPER" in
  368. Custom*)
  369.         case "$PAPER" in
  370.         Custom\.[0-9]*\x[0-9]*)
  371.             XDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/x.*//'`
  372.             YDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/.*x//'`
  373.             ;;
  374.         *)
  375.         #%%BeginFeature: *CustomPageSize True
  376.         #216
  377.         #360
  378.         #0
  379.         #0
  380.         #0
  381.         #pop pop pop pop pop
  382.  
  383.         #%%BeginFeature: *CustomPageSize True
  384.         #792.000000 612.000000 1 0.000000 0.000000
  385.         #pop pop pop pop pop
  386.  
  387.         if [ $DEBUG = 0 ]; then
  388.             TMPFILE=/tmp/cus$$
  389.         else
  390.             TMPFILE=/tmp/custom.ps
  391.         fi
  392.         cat >$TMPFILE
  393.         exec <$TMPFILE
  394.  
  395.         tmp=`head -n 10000 $TMPFILE \
  396.             | sed -n '/CustomPageSize/{n;p;n;p;}' \
  397.             | tr '\n' ' '`
  398.         case "$tmp" in
  399.         [0-9]*\ [0-9]*)
  400.             XDIM=`echo "$tmp" | sed 's/ .*//'`
  401.             YDIM=`echo "$tmp" | sed -e 's/^[^ ]* //' -e 's/ .*//'`
  402.             ;;
  403.         *)
  404.             if [ $DEBUG = 0 ]; then rm -f $TMPFILE; fi
  405.             error "Custom page size [XY]DIM != 1-99999"
  406.             ;;
  407.         esac
  408.         ;;
  409.         esac
  410.         XDIM=`dc -e "$XDIM 1200* 72/p"`
  411.         YDIM=`dc -e "$YDIM 600* 72/p"`
  412.         PAPER=21;        paper=letter;
  413.                 set_clipping 2 100     2 100
  414.         ;;
  415. 1|a4|A4)    PAPER=1;    paper=a4;        XDIM="9920";  YDIM="7016"
  416.         set_clipping 150 100    150 100
  417.         ;;
  418. 2|letter)    PAPER=2;    paper=letter;    XDIM="10200"; YDIM="6600"
  419.         set_clipping 150 100    150 100
  420.         ;;
  421. 3|legal)    PAPER=3;    paper=legal;     XDIM="10200"; YDIM="8400"
  422.         set_clipping 150 100    150 100
  423.         ;;
  424. 5|a5|A5)    PAPER=5;    paper=a5;        XDIM="6992";  YDIM="4960"
  425.         set_clipping 150 100    150 100
  426.         ;;
  427. 6|b5jis|B5jis)    PAPER=6;    paper=b5;        XDIM="8598";  YDIM="6070"
  428.         set_clipping 150 100    150 100
  429.         ;;
  430. 7|a6|A6)    PAPER=7;    paper=a6;        XDIM="4960";  YDIM="3496"
  431.         set_clipping 150 100    150 100
  432.         ;;
  433. 8|envMonarch)    PAPER=8;    paper=envMonarch;XDIM="4650";  YDIM="4500"
  434.         set_clipping 150 100    150 100
  435.         ;;
  436. 9|envDL)    PAPER=9;    paper=envDL;     XDIM="5200";  YDIM="5200"
  437.         set_clipping 150 100    150 100
  438.         ;;
  439. 10|envC5)    PAPER=10;    paper=envC5;     XDIM="7650";  YDIM="5408"
  440.         set_clipping 150 100    150 100
  441.         ;;
  442. 11|"env#10")    PAPER=11;    paper=env10;     XDIM="4950";  YDIM="5700"
  443.         set_clipping 150 100    150 100
  444.         ;;
  445. 12|executive)    PAPER=12;    paper=executive; XDIM="8700";  YDIM="6300"
  446.         set_clipping 150 100    150 100
  447.         ;;
  448. 13|"env#9")    PAPER=13;    paper=env9;      XDIM="4496";  YDIM="5324"
  449.         set_clipping 150 100    150 100
  450.         ;;
  451. *)        error "Unimplemented paper code $PAPER";;
  452. esac
  453. # e.g. /usr/share/ghostscript/7.07/lib/gs_statd.ps
  454. PAPERSIZE="-sPAPERSIZE=$paper";
  455.  
  456. case "$RES" in
  457. 300x300)    XDIM=`expr $XDIM / 4`; YDIM=`expr $YDIM / 2`;;
  458. 600x600)    XDIM=`expr $XDIM / 2`;;
  459. 1200x600)    ;;
  460. 1200x1200)    YDIM=`expr $YDIM \* 2`;;
  461. 600x1200)    XDIM=`expr $XDIM / 2`; YDIM=`expr $YDIM \* 2`;;
  462. esac
  463. DIM="${XDIM}x${YDIM}"
  464.  
  465. #
  466. # Filter thru psnup if N-up printing has been requested
  467. #
  468. case $NUP in
  469. [234689]|1[024568])    PREFILTER="nup";;
  470. *)            PREFILTER=cat;;
  471. esac
  472. if [ "$DEBUG" -ge 9 ]; then
  473.     PREFILTER="tee /tmp/$BASENAME.ps"
  474. fi
  475.  
  476. #
  477. #    Overload -G.  If the file name ends with ".icm" or ".ICM"
  478. #    then convert the ICC color profile to a Postscript CRD,
  479. #    then prepend it to the users job.  Select the intent
  480. #    using the -I option.
  481. #
  482.  
  483. create_crd() {
  484.     #
  485.     # Create a Postscript CRD
  486.     #
  487.     ICC2PS=$PREFIX/bin/foo2zjs-icc2ps
  488.     if [ -x $ICC2PS ]; then
  489.     case "$GAMMAFILE" in
  490.     none | none.icm | */none.icm)
  491.         ;;
  492.     *)
  493.         if [ -x /usr/bin/logger ]; then
  494.         logger -t "$BASENAME" -p lpr.info -- \
  495.         "`basename $ICC2PS` -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps"
  496.         fi
  497.         $ICC2PS -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps 2>$ICCTMP.log \
  498.         || error "Problem converting .ICM file to Postscript"
  499.         ;;
  500.     esac
  501.  
  502.     PSTOPS_OPTS="$PSTOPS_OPTS -c"
  503.     cat > $ICCTMP.usecie.ps <<-EOF
  504.         %!PS-Adobe-3.0
  505.         <</UseCIEColor true>>setpagedevice
  506.     EOF
  507.     if [ "$QUALITY" = wts ]; then
  508.         cat >> $ICCTMP.usecie.ps <<-EOF
  509.         << /UseWTS true >> setuserparams
  510.         <<
  511.             /AccurateScreens true
  512.             /HalftoneType 1
  513.             /HalftoneName (Round Dot Screen) cvn
  514.             /SpotFunction { 180 mul cos exch 180 mul cos add 2 div}
  515.             /Frequency 137
  516.             /Angle 37
  517.         >> sethalftone
  518.         EOF
  519.     fi
  520.     cat > $ICCTMP.selcrd.ps <<-EOF
  521.         /Current /ColorRendering findresource setcolorrendering
  522.     EOF
  523.     case "$GAMMAFILE" in
  524.     none | none.icm | */none.icm) GAMMAFILE="$ICCTMP.usecie.ps";;
  525.     *)    GAMMAFILE="$ICCTMP.usecie.ps $ICCTMP.crd.ps $ICCTMP.selcrd.ps";;
  526.     esac
  527.     else
  528.     GAMMFILE=
  529.     fi
  530. }
  531.  
  532. if [ $DEBUG -gt 0 ]; then
  533.     ICCTMP=/tmp/icc
  534. else
  535.     ICCTMP=/tmp/icc$$
  536. fi
  537.  
  538. if [ "" = "$COLOR" ]; then
  539.     COLORMODE=
  540.     GAMMAFILE=
  541. else
  542.     case "$COLORMODE" in
  543.     default)    COLORMODE=$DEFAULTCOLORMODE;;
  544.     esac
  545.     case "$GAMMAFILE" in
  546.     default)    GAMMAFILE=samclp300-0.icm;;
  547.     esac
  548. fi
  549.  
  550. CRDBASE="$PREFIX/share/foo2hiperc/crd"
  551. case "$MODEL" in
  552.     0)    model=CLP-300;;
  553.     1)    model=CLP-600;;
  554. esac
  555. case "$RES" in
  556.     600x600)    SCREEN=$model-600x600cms2;;
  557.     1200x600)    SCREEN=$model-1200x600cms2;;
  558.     1200x1200)    SCREEN=$model-1200x1200cms2;;
  559. esac
  560.  
  561. PSTOPS_OPTS="-n"
  562.  
  563. case "$COLORMODE" in
  564. 0|"")
  565.     # Monochrome
  566.     ;;
  567. 10|icm)
  568.     # Use old ICM method
  569.     AIB=-A
  570.     BC=-B
  571.     case "$GAMMAFILE" in
  572.     none | none.icm | */none.icm)
  573.     create_crd
  574.     ;;
  575.     *.icm|*.ICM|*.icc|*.ICC)
  576.     #
  577.     # Its really an .ICM file, not a gamma file.
  578.     #
  579.     # The file can be a full path name, or the name of a file in $SHARE/icm/
  580.     #
  581.     if [ -r "$GAMMAFILE" ]; then
  582.         create_crd
  583.     elif [ -r "$SHARE/icm/$GAMMAFILE" ]; then
  584.         GAMMAFILE="$SHARE/icm/$GAMMAFILE"
  585.         create_crd
  586.     else
  587.         GAMMAFILE=
  588.     fi
  589.     ;;
  590.     esac
  591.     ;;
  592. 1|crd)
  593.     # CRD
  594.     GAMMAFILE=""
  595.     GAMMAFILE="$GAMMAFILE $CRDBASE/${model}cms"
  596.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  597.     ;;
  598. *.crd)
  599.     GAMMAFILE="$CRDBASE/prolog.ps"
  600.     if [ -f $COLORMODE ]; then
  601.     GAMMAFILE="$GAMMAFILE $COLORMODE"
  602.     elif [ -f $CRDBASE/$COLORMODE ]; then
  603.     GAMMAFILE="$GAMMAFILE $CRDBASE/$COLORMODE"
  604.     else
  605.     error "Can't find CRD '$COLORMODE' in . or in $CRDBASE"
  606.     fi
  607.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  608.     ;;
  609. *)
  610.     error "Unknown color method '$COLORMODE'"
  611.     ;;
  612. esac
  613.  
  614. if [ "$COLOR" != "" -a "$QUALITY" = wts ]; then
  615.     PSTOPS_OPTS="$PSTOPS_OPTS -w"
  616. fi
  617.  
  618. if [ "" != "$COLOR" ]; then
  619.     if [ "" = "$AIB" -a "" = "$BC" ]; then
  620.     # Faster, but can't handle AllIsBlack or BlackClears
  621.     GSDEV=-sDEVICE=pksmraw
  622.     else
  623.     # Can't handle different size pages
  624.     GSDEV=-sDEVICE=bitcmyk
  625.     fi
  626. fi
  627.  
  628. #
  629. #    Figure out USERNAME
  630. #
  631. if [ "$LPUSER" != "" ]; then
  632.     USER="$LPUSER@$LPHOST"
  633. else
  634.     USER=""
  635. fi
  636.  
  637. #
  638. #    Main Program, just cobble together the pipeline and run it
  639. #
  640. #    The malarky with file descriptors 1 and 3 is to avoid a bug in
  641. #    (some versions?) of Ghostscript where Postscript's stdout gets
  642. #    intermingled with the printer drivers output, resulting in
  643. #    corrupted image data.
  644. #
  645. GS="$GSBIN -q -dBATCH -dSAFER -dQUIET -dNOPAUSE"
  646.  
  647. foo2zjs-pstops $PSTOPS_OPTS | \
  648. $PREFILTER \
  649. | ($GS $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS \
  650.     -sOutputFile="|cat 1>&3" $GAMMAFILE -_ >/dev/null) 3>&1 \
  651. | foo2hiperc -r$RES -g$DIM -p$PAPER -m$MEDIA -n$COPIES -d$DUPLEX -s$SOURCE \
  652.         $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG $SAVETONER \
  653.         -J "$LPJOB" -U "$USER" \
  654.         $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD $COMPRESSED -D$DEBUG
  655.  
  656. #
  657. #    Log the command line, for debugging and problem reports
  658. #
  659. if [ -x /usr/bin/logger ]; then
  660.     logger -t "$BASENAME" -p lpr.info -- \
  661.     "$GSBIN $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS $GAMMAFILE"
  662.     logger -t "$BASENAME" -p lpr.info -- \
  663.     "foo2hiperc -r$RES -g$DIM -p$PAPER -m$MEDIA \
  664. -n$COPIES -d$DUPLEX -s$SOURCE $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG \
  665. $SAVETONER $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD $COMPRESSED"
  666. fi
  667.  
  668. #
  669. #    Remove cruft
  670. #
  671. if [ $DEBUG -eq 0 ]; then
  672.     for i in crd.ps log usecie.ps selcrd.ps
  673.     do
  674.     file="$ICCTMP.$i"
  675.     [ -f $file ] && rm -f $file
  676.     done
  677.     [ -f "$TMPFILE" ] && rm -f $TMPFILE
  678.     [ -f "$TMPFILE2" ] && rm -f $TMPFILE2
  679. fi
  680.  
  681. exit 0
  682.